#include "api.h"

struct EnumWndProcParam {
  DWORD cur_pid;
  HWND window;
  std::wstring clz;
};

BOOL CALLBACK enum_window_proc(HWND window, LPARAM lparam) {
  EnumWndProcParam *param = (EnumWndProcParam *)lparam; // 直接使用指针
  DWORD pid = 0;

  GetWindowThreadProcessId(window, &pid);

  // 首先检查进程ID是否匹配
  if (pid != param->cur_pid) {
    return TRUE; // 继续枚举
  }

  // 检查是否有父窗口（应该是顶级窗口）
  if (GetParent(window) != NULL) {
    return TRUE; // 继续枚举
  }

  wchar_t clz[50] = {0};
  GetClassNameW(window, clz, 50);

  // 检查类名是否匹配
  if (param->clz.compare(clz) == 0) {
    param->window = window; // 直接设置到参数中
    return FALSE;           // 找到匹配窗口，停止枚举
  }

  return TRUE; // 继续枚举
}

HWND get_main_wnd(const std::wstring &clz) {
  EnumWndProcParam param;
  param.cur_pid = GetCurrentProcessId();
  param.window = NULL;
  param.clz = clz;

  EnumWindows(enum_window_proc, (LPARAM)&param);

  return param.window;
}
